package cc.rengu.igas.share.facade.bean.cups;

import cc.rengu.oltp.service.common.enums.OltpRpcdEnum;
import cc.rengu.oltp.service.model.BizException;

import java.util.Arrays;

/**
 * F61.6.2   AM用法 位图
 * 16 字节，采用位图构造方式，每个字节表示一种验证方式，从最左边的字节开始，每个字节依次代表如下验证方式：
 *
 * @author fangminwei
 * @date 2021/4/17
 */
@SuppressWarnings("AlibabaEnumConstantsMustHaveComment")
public enum F61_6_2_BITMAP {
    _1(1 - 1, "密码验证（密码信息存放52域和53域之中）"),
    _2(2 - 1, "卡有效期验证（卡有效期信息存放在14域之中）"),
    _3(3 - 1, "身份证件验证（身份证件信息存放在61.1域之中）"),
    _4(4 - 1, "保留使用，用全零填充"),
    _5(5 - 1, "保留使用，用全零填充"),
    _6(6 - 1, "CVN2验证（CVN2信息存放在61.4域之中）"),
    _7(7 - 1, "保留使用，用全零填充"),
    _8(8 - 1, "姓名验证（姓名信息存放在本用法之中）"),
    _9(9 - 1, "手机号码验证（手机号码信息存放在本用法之中）"),
    _10(10 - 1, "动态验证码验证（动态验证码信息存放在本用法之中）"),
    _11(11 - 1, "保留（3DS2.0专用，参见《3DS2.0项目技术实施指南》）"),
    _12(12 - 1, "委托关系验证（委托关系要素包括但不限于持卡人卡号、商户代码、用户号码、商户名称、用户号码类型、代收频率、委托关系限期、最高限制金额、最低限制金额等基本要素；委托关系以持卡人卡号、商户代码、用户号码作为主键）"),
    _1316(13 - 1, "保留使用，用全零填充"),
    ;

    private int code;
    private String desc;

    F61_6_2_BITMAP(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return code + "-" + desc;
    }

    public static F61_6_2_BITMAP find(int code) {
        F61_6_2_BITMAP result = Arrays.stream(F61_6_2_BITMAP.values())
                .filter(e -> e.getCode() == code).findFirst().orElse(null);

        if (result == null) {
            throw new BizException(OltpRpcdEnum.PARAM_IS_EMPTY_OR_NULL.getRespCode(), "找不到对应的枚举信息" + code);
        }
        return result;
    }
}
